In [1]:
# notebook导出html时显示pyecharts
from pyecharts import *
online()
In [2]:
# 直接隐藏代码
from IPython.display import display
from IPython.display import HTML
import IPython.core.display as di
di.display_html('<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle();}});</script>', raw=True)
CSS = """#notebook div.output_subarea {max-width:100%;}""" #changes output_subarea width to 100% (from 100% - 14ex)
HTML('<style>{}</style>'.format(CSS))
Out[2]:
In [3]:
# 导包
import sys
sys.path.append('E:/aiMachineFactor-master/aiMachineFactor/factorEmpirical/')

import numpy as np
import pandas as pd
from scipy.stats import mstats
from scipy import stats
from datetime import datetime
from alphalens036.plotting import *

from alphalens036.utils import *
from alphalens036.performance import *
from alphalens036.pyeplotting import *
import os

# 禁止输出warining
import warnings
warnings.filterwarnings("ignore")
In [4]:
# 因子报告分析原始数据整理
#20秒
plot_data = PlotData.from_pickle('E:/aiMachineFactor-master/aiMachineFactor/factorGenerate/xgb_regress/predict',
                                 'E:/aiMachineFactor-master/aiMachineFactor/cache/cache_data/total_filled',
                                 'E:/aiMachineFactor-master/aiMachineFactor/cache/cache_data/classone'
                                )
plot_data.get_factor()
# plot_data._factor.head()

特征分析

因子重要性排名

机器学习算法模型可以导出模型因子特征的重要性,这能帮助我们直观地观察模型主要受那些因子影响。

下图统计了从2010年开始,模型的特征重要性从大到小的排名。

In [5]:
#特征重要性图示
plot_data.read_feature(r'E:\aiMachineFactor-master\aiMachineFactor\factorGenerate\xgb_regress\importance')
plot_data.plot_feature()
Out[5]:

收益率分析

分位数组合的平均超额收益

不同分位数组合的日平均超额收益情况,图中的纵轴超额收益的单位为bps(0.0001)。

无论前瞻时间窗口为1天、5天、10天、20天,第五分位组合的超额收益均为正,第一分位组合超额收益则为负。

从一至五,各个分位数组合超额收益呈现递增趋势,显示出较好的分层效果。

In [6]:
#20秒
return_plot = ReturnPlot(plot_data)
return_plot.compute_mean_return()
return_plot.plot_q_bar()
Out[6]:

多空组合的平均超额收益时序图

计算最好与最坏的分位数组合的平均超额收益之差,绘制其随时间的变化。

无论前瞻时间窗口,该序列的聚集效应明显,与整个市场的波动性密切相关,而且均值大多数时间内保持为正数。

In [7]:
return_plot.plot_q_spread()
Out[7]:

多空组合的累计收益

做多最好的分位数组合同时做空最差的分位数组合,不同的前瞻时间窗口表示不同的持有期。

持仓周期与组合的表现效果之间存在反向关系,随市场变化调仓越快,组合的表现越好。

In [8]:
#2m23s
return_plot.plot_cum_ret_p()
Out[8]:

稳定性分析

自相关系数

因子的自相关系数可以展示出因子的时间序列稳定性。

当前因子的自相关系数大部分时间保持比较高的水平。

In [9]:
# 38s
turnover_plot = TurnoverPlot(plot_data)
turnover_plot.compute_q_turnover()
turnover_plot.plot_ac(period='1D')
Out[9]:

多空组合的换手率

计算因子换手率可以展示出因子的时间序列稳定性,侧面反映出使用该因子做策略时候的调仓成本等。

In [10]:
turnover_plot.plot_turnover()
Out[10]:

信息系数分析

信息系数衡量的是因子对股票横截面超额收益率的预测能力;计算方式为当期因子值与下期股票收益率之间的秩相关系数。

信息系数越接近于1,说明因子的预测效果越好。

信息系数热力图

对于不同的调仓周期,IC月度平均后作热度图,横轴为年度,纵轴为月度。

图中颜色越红表示IC越大,也即表示因子在这个月表现良好,颜色越绿表示因子在这个月表现不佳。

In [11]:
# 51s
ic_plot=ICPlot(plot_data)
ic_plot.compute_ic()
In [12]:
ic_plot.plot_ic_heatmap()
Out[12]:

信息系数时序图

对于不同的调仓周期,计算得到的因子信息系数的时间序列作图,通过查验因子信息系数的时间序列,可以看到因子的预测能力随着时间的变化。

信息系数序列的均值尽可能的大,走势越稳定,表明因子的效果越好。

In [13]:
ic_plot.plot_ic_ts()
Out[13]:

信息系数直方图

对于不同的调仓周期,计算得到的因子信息系数的作分布直方图。

可以直观看到信息系数的分布特征,比如左偏、厚尾等现象。

In [14]:
ic_plot.plot_ic_hist()
Out[14]:

分行业表现

In [15]:
# TODO 分行业的柱状图,时间上累计平均

效果统计表

In [16]:
# TODO 反应最大回测、波动性、alpha、beta、等等。